/**
  * Author: Mei
  * Date: 2020-12-01 21:04
  * Description: 
  * 普通的队列是一种先进先出的数据结构，元素在队列尾追加，而从队列头删除。

在优先队列中，元素被赋予优先级。当访问元素时，具有最高优先级的元素最先删除。优先队列具有最高级先出 （first in, largest out）的行为特征。
  *
  *
  */
#include<iostream>
#include <queue>
#include <vector>

using namespace std;

struct tmp1 //运算符重载<
{
    int x;

    tmp1(int a) { x = a; }

    bool operator<(const tmp1 &a) const {
        return x > a.x; //大顶堆
    }
};

//方法2
struct tmp2 //重写仿函数
{
    bool operator()(tmp1 a, tmp1 b) {
        return a.x > b.x; //大顶堆
    }
};

int main() {
    tmp1 a(1);
    tmp1 b(2);
    tmp1 c(3);

    //priority_queue<tmp1> d;
    //d.push(b);
    //d.push(c);
    //d.push(a);
    //while (!d.empty()) {
    //    cout << d.top().x << '\n';
    //    d.pop();
    //}
    //cout << endl;

    priority_queue<tmp1, vector<tmp1>, tmp2> f;
    //priority_queue<tmp1> f;
    f.push(b);
    f.push(c);
    f.push(a);
    cout << f.top().x << endl;
    f.pop();
    cout << f.top().x << endl;


    //while (!f.empty()) {
    //    cout << f.top().x << '\n';
    //    f.pop();
    //}

    return 0;
}